Cryptext x64 - Projektübergabe
==============================

Aktueller Quellstand: v0.12 build 25
Datum: 29.09.2026
Projektinhaber: NotCompatible

Build-25-Stand:
  Der Quelltext und die umbenannte externe DLL sind vorbereitet.
  Cryptext64.exe und Cryptext64Shell.dll müssen mit `scr\build.bat` neu
  erstellt werden, damit der fest einkompilierte DLL-Name und alle sichtbaren
  Versionsangaben und die neue erhöhte Drag&Drop-Freigabe zu Build 25 passen.
  Alte Binärdateien wurden bewusst nicht als Build 25 ausgegeben.

1. Wichtiger aktueller Stand
----------------------------

Cryptext ist eine native Windows-x64-FASM-Anwendung mit AES-256-GCM und den
Writer-KDFs PBKDF2, Argon2id 64 MiB, Argon2id 1 GiB, scrypt 256 MiB, nativer
Windows-WebAuthn-FIDO2 und externer CryptextFido2.Win10.dll.

Windows 11: Der interne FIDO2-Weg verwendet die Windows-Systemdatei
webauthn.dll ab API v4 und benötigt keine zusätzliche Kryptografie-DLL.

Windows 10 extern: CryptextFido2.Win10.dll ABI 1 verwendet libfido2/USB-CTAP2 und
hmac-secret. Sie wurde unter Windows 10 mit echter Hardware erfolgreich für
Verschlüsseln, Entschlüsseln nach Neustart und Mehrfachauswahl getestet. Beim
Erzeugen waren eine PIN-Eingabe und zwei Berührungen nötig. Falsche PIN:
0xA1F00031, kein automatischer Wiederholungsversuch.

2. Änderungen in Build 25
-------------------------

- `src/elevation.asm` erhöht Cryptext ausschließlich bei ausgewähltem externen
  FIDO2-Modus und tatsächlich vorhandener ABI-1-DLL.
- Die Erhöhung erfolgt vor CmdLine_Parse und SingleInstance_InitOrForward.
  Dadurch bleiben Explorer-/Kommandozeilenargumente beim UAC-Neustart erhalten.
- Nach Speichern des externen Modus wird im Leerlauf automatisch neu gestartet.
  Während eines aktiven Auswahl-Workflows wird nicht neu gestartet, damit eine
  reine Drag-and-drop-Auswahl nicht verloren geht.
- Bei einer einzelnen Datei wird eine schon von der DLL gezeigte genaue
  PIN-/CTAP-Fehlermeldung nicht noch einmal durch den allgemeinen Cryptext-
  FIDO2-Dialog wiederholt. Mehrfachauswahl behält ihre Weiter/Stop-Nachfrage.
- Die externe DLL heißt nun eindeutig `CryptextFido2.Win10.dll`; Loader,
  Installer, Tooltips, Buildskript, Probe-Quelltext, Tests und Dokumentation
  verwenden denselben Namen.
- Der Installer entfernt beim erfolgreichen Update die veraltete Datei
  `CryptextFido2.dll` aus dem Installationsordner.
- Die Lizenzhinweise verweisen nun ausdrücklich auf die eingeschränkte
  `LICENSE_Source_Inspection_EN-DE.txt`, ohne sie als Open Source darzustellen.
- Das erhöhte Hauptfenster ruft `ChangeWindowMessageFilterEx` ausschließlich
  für `WM_DROPFILES`, `WM_COPYDATA` und `WM_COPYGLOBALDATA` auf. Dadurch kann
  der normal laufende Explorer wieder klassisches Drag&Drop an Cryptext senden,
  ohne andere Fensternachrichten allgemein durch die UIPI-Grenze zu öffnen.
- Der Filter wird nur für einen bestätigten erhöhten Prozess gesetzt; normal
  gestartetes Cryptext behält seinen bisherigen Drag&Drop-Pfad unverändert.
- Produkt-, Datei- und MSIX-Version: 0.12.0.25.

3. Externe DLL und Lieferumfang
-------------------------------

`bin/CryptextFido2.Win10.dll` bleibt inhaltlich die unter Windows 10 getestete,
unveränderte
Build-22-Binärdatei (1.300.872 Bytes). Ihr sicherer Loader verwendet den
absoluten Pfad neben Cryptext64.exe und `LoadLibraryExW` mit
LOAD_LIBRARY_SEARCH_DLL_LOAD_DIR | LOAD_LIBRARY_SEARCH_SYSTEM32. ABI und alle
drei Exporte werden geprüft.

Die rund 43 MiB großen Fremdquellbäume wurden aus dem Paket entfernt. Erhalten:

- fido2_dll/BUILD_PROVENANCE.json (Archive, Versionen, SHA-256)
- fido2_dll/THIRD_PARTY_NOTICES.txt
- fido2_dll/licenses/third_party (vollständige Lizenztexte)
- fido2_dll/patches/libfido2-hid_win-cryptext.c (vollständige Änderung)
- fido2_dll/vendor/README-DE.txt (erneutes Bereitstellen der Quellen)
- fido2_dll/build.sh (Quellpfade über Umgebungsvariablen oder vendor-Ordner)

Fremdprojekte: libfido2 1.18.0-Entwicklungsstand, libcbor 0.14.0,
LibreSSL 4.3.2 und zlib 1.3.2.1-Entwicklungsstand. Sie sind statisch in der DLL;
zur Laufzeit werden keine zusätzlichen Fremd-DLLs benötigt.

4. Bauen
--------

Windows/FASM:
  scr\build.bat
  Standard: FASM_HOME=C:\fasm, FASM 1.73.35 mit INCLUDE\win64a.inc.

Ausgaben:
  bin\Cryptext64.exe
  bin\Cryptext64Shell.dll

Die externe FIDO2-DLL muss für Build 25 nicht neu gebaut werden. Der getestete
Binärstand wird beibehalten. Ihr eigener Crossbuild ist separat in
scr/fido2_dll dokumentiert.

5. Tests
--------

Der statische Build-25-Test prüft zusätzlich den neuen DLL-Dateinamen in Loader,
Installer, Buildskript, Probe-Quelltext und Tooltip. Die bestehenden Tests prüfen
weiterhin Reihenfolge und Begrenzung der Erhöhung,
Argumentweitergabe, Leerlaufbedingung, unterdrückte Doppelmeldung sowie die
erhaltenen Lizenz-/Herkunftsdateien. Die bestehenden KDF-/Dialog-/Versions-
Tests wurden auf Build 25 und den sechsten Modus aktualisiert. Zusätzlich wird
statisch geprüft, dass genau die drei Shell-Drop-Nachrichten nur hinter der
Erhöhungsprüfung freigegeben werden und die ältere globale Filter-API nicht
importiert wird.

Vor einer Veröffentlichung praktisch unter Windows 10 prüfen:

1. Externen FIDO2-Modus speichern -> genau eine UAC-Abfrage, erhöhter Neustart.
2. Explorer-Datei „Verschlüsseln“ -> Pfad bleibt nach UAC-Neustart erhalten.
3. Mehrere Dateien -> eine PIN, zwei Berührungen nur beim ersten Erzeugen.
4. Falsche PIN -> nur der DLL-Fehler 0xA1F00031, kein zweiter allgemeiner Dialog.
5. DLL entfernen -> externe Auswahl ausgegraut, keine UAC-Abfrage.
6. Auf PBKDF2/Argon2id/scrypt/WebAuthn wechseln -> keine UAC-Anforderung.
7. Im externen Modus Cryptext erhöht laufen lassen und Dateien sowie Ordner aus
   dem normal gestarteten Explorer auf das Hauptfenster ziehen.

6. Sicherheitsregeln
--------------------

- Keine stillen KDF-Rückfälle.
- Originaldatei erst nach vollständig verifizierter finaler Ausgabedatei löschen.
- Keine Schlüssel, PINs oder Passwörter in Kommandozeile, Registry oder Logs.
- DLL nie über Arbeitsverzeichnis oder PATH suchen.
- Fehlercodes anzeigen, wenn sie diagnostisch echt und hilfreich sind.
- FIDO2-Dateien sind ohne den passenden, nicht zurückgesetzten Schlüssel nicht
  wiederherstellbar; es gibt noch kein Mehrschlüssel-/Recovery-Verfahren.
